//package com.whfp.coky.face;
//
//import android.graphics.Bitmap;
//import android.graphics.BitmapFactory;
//import android.text.TextUtils;
//import android.util.Log;
//
//import androidx.lifecycle.ViewModel;
//import androidx.viewbinding.ViewBinding;
//
//import com.baidu.idl.face.platform.FaceConfig;
//import com.baidu.idl.face.platform.FaceEnvironment;
//import com.baidu.idl.face.platform.FaceSDKManager;
//import com.baidu.idl.face.platform.LivenessTypeEnum;
//import com.baidu.idl.face.platform.listener.IInitCallback;
//import com.baidu.idl.face.platform.ui.utils.IntentUtils;
//import com.baidu.idl.face.platform.utils.Base64Utils;
//import com.baidu.idl.face.platform.utils.DensityUtils;
//import com.hjq.permissions.Permission;
//import com.whfp.coky.R;
//import com.whfp.coky.aop.Permissions;
//import com.whfp.coky.other.DialogBuilder;
//import com.whfp.coky.ui.base.BaseActivity;
//import com.whfp.coky.ui.base.BaseDialog;
//import com.whfp.coky.ui.base.BaseViewModel;
//import com.whfp.coky.ui.dialog.MessageDialog;
//import com.whfp.coky.ui.dialog.TipsDialog;
//
//import java.io.BufferedOutputStream;
//import java.io.File;
//import java.io.FileNotFoundException;
//import java.io.FileOutputStream;
//import java.io.IOException;
//import java.io.OutputStream;
//import java.util.ArrayList;
//import java.util.List;
//
//import okhttp3.Call;
//
///**
// * 人脸核验界面
// */
//public abstract class BaseFaceActivity<VM extends BaseViewModel<VB>,VB extends ViewBinding> extends BaseActivity<VM,VB> {
//
//    private static final String TAG = BaseFaceActivity.class.getSimpleName();
//    // 动作活体条目集合
//    public static List<LivenessTypeEnum> livenessList = new ArrayList<>();
//    // 活体随机开关
//    public static boolean isLivenessRandom = true;
//    // 语音播报开关
//    public static boolean isOpenSound = false;
//    // 质量等级（0：正常、1：宽松、2：严格、3：自定义）
//    public static int qualityLevel = Const.QUALITY_NORMAL;
//
//    private boolean mIsInitSuccess;
//
//    protected boolean isFaceChecked = false;
//
//    @Override
//    @Permissions({Permission.CAMERA, Permission.WRITE_EXTERNAL_STORAGE, Permission.READ_EXTERNAL_STORAGE})
//    public void initView() {
//        addActionLive();
//        initLicense();
//    }
//
//    @Override
//    public void initData() {
//
//    }
//
//    @Override
//    protected void onResume() {
//        super.onResume();
//        String bmpStr = IntentUtils.getInstance().getBitmap();
//        if (TextUtils.isEmpty(bmpStr)) {
//            return;
//        }
//        Bitmap bmp = base64ToBitmap(bmpStr);
//        bmp = FaceSDKManager.getInstance().scaleImage(bmp,
//                DensityUtils.dip2px(getApplicationContext(), 150),
//                DensityUtils.dip2px(getApplicationContext(), 150));
//        if (!isFaceChecked) {
//            dealCaptureInResume(bmp);
//            httpFaceCheck(bmpStr);
//        }
//    }
//
//    protected void dealCaptureInResume(Bitmap bmp) {
//    }
//
////    protected Bitmap buildBitmapByString(String bmpStr, int scale) {
////        Bitmap bmp = base64ToBitmap(bmpStr);
////        if (scale > 0) {
////            bmp = FaceSDKManager.getInstance().scaleImage(bmp,
////                    DensityUtils.dip2px(getApplicationContext(), scale),
////                    DensityUtils.dip2px(getApplicationContext(), scale));
////        }
////        return bmp;
////    }
//
//    protected abstract FaceCheckApi buildApi(File file);
//
////    图片大小小些，清晰度会差些
////    public File saveBitmapFile(Bitmap bitmap){
////        File file = new File(getContext().getExternalFilesDir(null), "face.jpg");
////        try {
////            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
////            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos);
////            bos.flush();
////            bos.close();
////        } catch (IOException e) {
////            e.printStackTrace();
////        }
////        return file;
////    }
//
//    private void httpFaceCheck(final String bmp) {
//        File file = base64ToFile(bmp);
//        EasyHttp.post(this)
//                .api(buildApi(file))
//                .request(new OnUpdateListener<HttpData<FaceCheckApi.Bean>>() {
//                    @Override
//                    public void onStart(Call call) {
//                        showDialog(getString(R.string.common_committing));
//                    }
//
//                    @Override
//                    public void onEnd(Call call) {
//                        hideDialog();
//                    }
//
//                    @Override
//                    public void onSucceed(HttpData<FaceCheckApi.Bean> result) {
//                        if (result.getResult() == Constants.CODE_NO_FACE) {
//                            showViewFaceInput(bmp);
//                        } else {
//                            toast(result.getMessage());
//                            if (result.getResult() == Constants.HTTP_OK) {
//                                isFaceChecked = true;
//                                doCheckOk();
//                            }
//                        }
//
//                    }
//
//                    @Override
//                    public void onFail(Exception e) {
//                        new TipsDialog.Builder(getContext())
//                                .setIcon(TipsDialog.ICON_ERROR)
//                                .setMessage(e.toString())
//                                .show();
//                    }
//
//                    @Override
//                    public void onProgress(int progress) {
//
//                    }
//                });
//    }
//
//    protected abstract void doCheckOk();
//
//    //    提示后台无人脸，提示人脸提交
//    private void showViewFaceInput(final String bmp) {
//        DialogBuilder.DialogMsg(getContext(),
//                "未发现人脸信息",
//                "首次登陆请完成人脸采集",
//                "上传",
//                new MessageDialog.OnListener() {
//            @Override
//            public void onConfirm(BaseDialog dialog) {
//                httpFaceUpload(bmp);
//            }
//        }).show();
//    }
//
//    //    上传人脸
//    private void httpFaceUpload(final String bmp) {
//        File file = base64ToFile(bmp);
//        EasyHttp.post(this)
//                .api(new FaceUploadApi(file)
//                        .setFileName(file.getName())
//                        .setToken(getString(Constants.TOKEN)))
//                .request(new OnUpdateListener<HttpData>() {
//                    @Override
//                    public void onStart(Call call) {
//                        showDialog(getString(R.string.common_uploading));
//                    }
//
//                    @Override
//                    public void onEnd(Call call) {
//                        hideDialog();
//                    }
//
//                    @Override
//                    public void onSucceed(HttpData result) {
//                        new TipsDialog.Builder(getContext())
//                                .setIcon(TipsDialog.ICON_FINISH)
//                                .setMessage("请再次核验，即将跳转..")
//                                .show();
//                        postDelayed(() -> goFaceCheck(), 500);
//                    }
//
//                    @Override
//                    public void onFail(Exception e) {
//                        new TipsDialog.Builder(getContext())
//                                .setIcon(TipsDialog.ICON_ERROR)
//                                .setMessage(e.toString())
//                                .show();
//                    }
//
//                    @Override
//                    public void onProgress(int progress) {
//
//                    }
//                });
//    }
//
////刷新头部
////    private void refreshHttpHeader(String tokenStr) {
////        EasyConfig.getInstance().setInterceptor(new IRequestInterceptor() {
////            @Override
////            public void interceptArguments(IRequestApi api, HttpParams params, HttpHeaders headers) {
////                headers.put(Constants.HEAD, Constants.HEAD_VALUE + tokenStr);
////            }
////        });
////    }
//
//
//    protected void goFaceCheck() {
//        if (!mIsInitSuccess) {
//            toast("初始化中，请稍候...");
//            return;
//        }
//        isFaceChecked = false;
//        startActivity(FaceLivenessExpActivity.class);
//    }
//
//
////    ------------------------------ utils ------------------------------------------
//
//    private Bitmap base64ToBitmap(String base64Data) {
//        byte[] bytes = Base64Utils.decode(base64Data, Base64Utils.NO_WRAP);
//        return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
//    }
//
//    protected File base64ToFile(String base64Data) {
//        File file = new File(getContext().getExternalFilesDir(null), "face.jpg");
//        byte[] bytes = Base64Utils.decode(base64Data, Base64Utils.NO_WRAP);
//        OutputStream os = null;
//        try {
//            os = new FileOutputStream(file);
//            os.write(bytes, 0, bytes.length);
//            os.flush();
//            os.close();
//        } catch (FileNotFoundException e) {
//            e.printStackTrace();
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        return file;
//    }
//
//    public File saveBitmapFile(Bitmap bitmap) {
//        File file = new File(getContext().getExternalFilesDir(null), "face.jpg");
//        try {
//            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
//            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos);
//            bos.flush();
//            bos.close();
//        } catch (FileNotFoundException e) {
//            // TODO Auto-generated catch block
//            e.printStackTrace();
//        } catch (IOException e) {
//            // TODO Auto-generated catch block
//            e.printStackTrace();
//        }
//        return file;
//    }
//
//
////    --------------------------------百度 AI方法---------------------------------------------
//
//    private void addActionLive() {
//        // 根据需求添加活体动作
//        livenessList.clear();
//        livenessList.add(LivenessTypeEnum.Eye);
//    }
//
//    private void initLicense() {
//        boolean success = setFaceConfig();
//        if (!success) {
//            toast("初始化失败 = json配置文件解析出错");
//            return;
//        }
//        // 为了android和ios 区分授权，appId=appname_face_android ,其中appname为申请sdk时的应用名
//        // 应用上下文
//        // 申请License取得的APPID
//        // assets目录下License文件名
//        FaceSDKManager.getInstance().initialize(getContext(), "yzd-face-android-face-android",
//                "idl-license.face-android", new IInitCallback() {
//                    @Override
//                    public void initSuccess() {
//                        runOnUiThread(new Runnable() {
//                            @Override
//                            public void run() {
//                                Log.e(TAG, "初始化成功");
//                                mIsInitSuccess = true;
//                            }
//                        });
//                    }
//
//                    @Override
//                    public void initFailure(final int errCode, final String errMsg) {
//                        runOnUiThread(new Runnable() {
//                            @Override
//                            public void run() {
//                                Log.e(TAG, "初始化失败 = " + errCode + " " + errMsg);
//                                mIsInitSuccess = false;
//                            }
//                        });
//                    }
//                });
//    }
//
//    /**
//     * 参数配置方法
//     */
//    private boolean setFaceConfig() {
//        FaceConfig config = FaceSDKManager.getInstance().getFaceConfig();
//        // SDK初始化已经设置完默认参数（推荐参数），也可以根据实际需求进行数值调整
//        // 质量等级（0：正常、1：宽松、2：严格、3：自定义）
//        // 获取保存的质量等级
////        SharedPreferencesUtil util = new SharedPreferencesUtil(mContext);
////        int qualityLevel = (int) util.getSharedPreference(Const.KEY_QUALITY_LEVEL_SAVE, -1);
////        if (qualityLevel == -1) {
////            qualityLevel = qualityLevel;
////        }
//        // 根据质量等级获取相应的质量值（注：第二个参数要与质量等级的set方法参数一致）
//        QualityConfigManager manager = QualityConfigManager.getInstance();
//        manager.readQualityFile(getContext().getApplicationContext(), qualityLevel);
//        QualityConfig qualityConfig = manager.getConfig();
//        if (qualityConfig == null) {
//            Log.e(TAG, "qualityConfig == null");
//            return false;
//        }
//        // 设置模糊度阈值
//        config.setBlurnessValue(qualityConfig.getBlur());
//        // 设置最小光照阈值（范围0-255）
//        config.setBrightnessValue(qualityConfig.getMinIllum());
//        // 设置最大光照阈值（范围0-255）
//        config.setBrightnessMaxValue(qualityConfig.getMaxIllum());
//        // 设置左眼遮挡阈值
//        config.setOcclusionLeftEyeValue(qualityConfig.getLeftEyeOcclusion());
//        // 设置右眼遮挡阈值
//        config.setOcclusionRightEyeValue(qualityConfig.getRightEyeOcclusion());
//        // 设置鼻子遮挡阈值
//        config.setOcclusionNoseValue(qualityConfig.getNoseOcclusion());
//        // 设置嘴巴遮挡阈值
//        config.setOcclusionMouthValue(qualityConfig.getMouseOcclusion());
//        // 设置左脸颊遮挡阈值
//        config.setOcclusionLeftContourValue(qualityConfig.getLeftContourOcclusion());
//        // 设置右脸颊遮挡阈值
//        config.setOcclusionRightContourValue(qualityConfig.getRightContourOcclusion());
//        // 设置下巴遮挡阈值
//        config.setOcclusionChinValue(qualityConfig.getChinOcclusion());
//        // 设置人脸姿态角阈值
//        config.setHeadPitchValue(qualityConfig.getPitch());
//        config.setHeadYawValue(qualityConfig.getYaw());
//        config.setHeadRollValue(qualityConfig.getRoll());
//        // 设置可检测的最小人脸阈值
//        config.setMinFaceSize(FaceEnvironment.VALUE_MIN_FACE_SIZE);
//        // 设置可检测到人脸的阈值
//        config.setNotFaceValue(FaceEnvironment.VALUE_NOT_FACE_THRESHOLD);
//        // 设置闭眼阈值
//        config.setEyeClosedValue(FaceEnvironment.VALUE_CLOSE_EYES);
//        // 设置图片缓存数量
//        config.setCacheImageNum(FaceEnvironment.VALUE_CACHE_IMAGE_NUM);
//        // 设置活体动作，通过设置list，LivenessTypeEunm.Eye, LivenessTypeEunm.Mouth,
//        // LivenessTypeEunm.HeadUp, LivenessTypeEunm.HeadDown, LivenessTypeEunm.HeadLeft,
//        // LivenessTypeEunm.HeadRight
//        config.setLivenessTypeList(livenessList);
//        // 设置动作活体是否随机
//        config.setLivenessRandom(isLivenessRandom);
//        // 设置开启提示音
//        config.setSound(isOpenSound);
//        // 原图缩放系数
//        config.setScale(FaceEnvironment.VALUE_SCALE);
//        // 抠图宽高的设定，为了保证好的抠图效果，建议高宽比是4：3
//        config.setCropHeight(FaceEnvironment.VALUE_CROP_HEIGHT);
//        config.setCropWidth(FaceEnvironment.VALUE_CROP_WIDTH);
//        // 抠图人脸框与背景比例
//        config.setEnlargeRatio(FaceEnvironment.VALUE_CROP_ENLARGERATIO);
//        // 加密类型，0：Base64加密，上传时image_sec传false；1：百度加密文件加密，上传时image_sec传true
//        config.setSecType(FaceEnvironment.VALUE_SEC_TYPE);
//        // 检测超时设置
//        config.setTimeDetectModule(FaceEnvironment.TIME_DETECT_MODULE);
//        // 检测框远近比率
//        config.setFaceFarRatio(FaceEnvironment.VALUE_FAR_RATIO);
//        config.setFaceClosedRatio(FaceEnvironment.VALUE_CLOSED_RATIO);
//        FaceSDKManager.getInstance().setFaceConfig(config);
//        return true;
//    }
//
//    @Override
//    protected void onDestroy() {
//        super.onDestroy();
//        IntentUtils.getInstance().release();
//    }
//}
